Sure, we see multi-peak (double-hump) infections at the national or state level, but do they happen in small geographic regions? It’s possible that after the first wave, people have some herd immunity and improve their safety practices to prevent a second wave. County level data helps us answer this– still not as granular as I’d like but better than state level data.

## ── Attaching packages ────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2     ✓ purrr   0.3.3
## ✓ tibble  3.0.4     ✓ dplyr   0.8.5
## ✓ tidyr   1.1.2     ✓ stringr 1.4.0
## ✓ readr   1.3.1     ✓ forcats 0.5.0
## Warning: package 'ggplot2' was built under R version 3.6.2
## Warning: package 'tibble' was built under R version 3.6.2
## Warning: package 'tidyr' was built under R version 3.6.2
## ── Conflicts ───────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
## Warning: package 'scales' was built under R version 3.6.2
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor

0.1 Loading data

covidByCounty <- loadCovidDataByGeo("US_COUNTY")

0.2 Steep increase counties

Counties that ever hit 1,000 new cases per day.

steepIncrease <- covidByCounty %>% dplyr::filter(newCasesPerDay > 1000) %>% dplyr::filter(state != "_ALL_")
steepIncreaseNames <- unique(steepIncrease$state)
steepIncreaseNames
##   [1] "Alabama: Mobile"             "Alabama: Tuscaloosa"        
##   [3] "Arizona: Maricopa"           "Arizona: Pima"              
##   [5] "Arizona: Yuma"               "California: Alameda"        
##   [7] "California: Contra Costa"    "California: Fresno"         
##   [9] "California: Kern"            "California: Los Angeles"    
##  [11] "California: Monterey"        "California: Orange"         
##  [13] "California: Riverside"       "California: Sacramento"     
##  [15] "California: San Bernardino"  "California: San Diego"      
##  [17] "California: San Joaquin"     "California: Santa Clara"    
##  [19] "California: Solano"          "California: Stanislaus"     
##  [21] "California: Ventura"         "Colorado: El Paso"          
##  [23] "Connecticut: Fairfield"      "Connecticut: Hartford"      
##  [25] "Connecticut: New Haven"      "Florida: Broward"           
##  [27] "Florida: Duval"              "Florida: Hillsborough"      
##  [29] "Florida: Lee"                "Florida: Miami-Dade"        
##  [31] "Florida: Orange"             "Florida: Palm Beach"        
##  [33] "Florida: Pinellas"           "Florida: Polk"              
##  [35] "Georgia: Cobb"               "Georgia: Fulton"            
##  [37] "Georgia: Gwinnett"           "Georgia: Unknown"           
##  [39] "Illinois: Cook"              "Illinois: DuPage"           
##  [41] "Illinois: Kane"              "Illinois: Lake"             
##  [43] "Illinois: Unknown"           "Illinois: Will"             
##  [45] "Indiana: Marion"             "Kansas: Johnson"            
##  [47] "Kansas: Sedgwick"            "Louisiana: Unknown"         
##  [49] "Massachusetts: Bristol"      "Massachusetts: Essex"       
##  [51] "Massachusetts: Middlesex"    "Massachusetts: Suffolk"     
##  [53] "Massachusetts: Worcester"    "Michigan: Chippewa"         
##  [55] "Michigan: Gratiot"           "Michigan: Jackson"          
##  [57] "Michigan: Kent"              "Michigan: Macomb"           
##  [59] "Michigan: Oakland"           "Michigan: Wayne"            
##  [61] "Minnesota: Hennepin"         "Missouri: St. Louis"        
##  [63] "Nebraska: Douglas"           "Nevada: Clark"              
##  [65] "New Jersey: Unknown"         "New Mexico: Bernalillo"     
##  [67] "New York: Nassau"            "New York: New York City"    
##  [69] "New York: Suffolk"           "New York: Westchester"      
##  [71] "North Carolina: Mecklenburg" "North Carolina: Wake"       
##  [73] "North Dakota: Unknown"       "Ohio: Cuyahoga"             
##  [75] "Ohio: Franklin"              "Ohio: Hamilton"             
##  [77] "Ohio: Lorain"                "Ohio: Summit"               
##  [79] "Oklahoma: Oklahoma"          "Oklahoma: Tulsa"            
##  [81] "Pennsylvania: Allegheny"     "Pennsylvania: Philadelphia" 
##  [83] "Puerto Rico: Unknown"        "Rhode Island: Kent"         
##  [85] "Rhode Island: Providence"    "Rhode Island: Unknown"      
##  [87] "South Carolina: Aiken"       "South Carolina: Greenville" 
##  [89] "Tennessee: Davidson"         "Tennessee: Shelby"          
##  [91] "Tennessee: Unknown"          "Texas: Anderson"            
##  [93] "Texas: Bexar"                "Texas: Brazoria"            
##  [95] "Texas: Cameron"              "Texas: Collin"              
##  [97] "Texas: Dallas"               "Texas: Denton"              
##  [99] "Texas: El Paso"              "Texas: Ellis"               
## [101] "Texas: Fort Bend"            "Texas: Guadalupe"           
## [103] "Texas: Harris"               "Texas: Hidalgo"             
## [105] "Texas: Howard"               "Texas: Midland"             
## [107] "Texas: Montgomery"           "Texas: Nueces"              
## [109] "Texas: Orange"               "Texas: Parker"              
## [111] "Texas: Potter"               "Texas: Tarrant"             
## [113] "Texas: Travis"               "Texas: Williamson"          
## [115] "Utah: Salt Lake"             "Utah: Utah"                 
## [117] "Utah: Weber"                 "Washington: King"           
## [119] "Washington: Snohomish"       "Washington: Spokane"        
## [121] "Wisconsin: Milwaukee"        "Wisconsin: Waukesha"
plotData <- covidByCounty %>%
  dplyr::filter(state %in% steepIncreaseNames)
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = state),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in steep increase counties') +
    facet_wrap(~ state) +
    theme_minimal()

0.3 New York

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="New York")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in New York counties') +
    facet_wrap(~ county) +
    theme_minimal()

0.4 New Jersey

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="New Jersey")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = paste('Trajectory of COVID-19 cases in', 'New Jersey', 'counties')) +
    facet_wrap(~ county) +
    theme_minimal()

0.5 Ohio

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="Ohio")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = paste('Trajectory of COVID-19 cases in', 'Ohio', 'counties')) +
    facet_wrap(~ county) +
    theme_minimal()

0.6 Michigan

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="Michigan")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in Michigan counties') +
    facet_wrap(~ county) +
    theme_minimal()

0.7 Illinois

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="Illinois")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in Illinois counties') +
    facet_wrap(~ county) +
    theme_minimal()

0.8 California

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="California")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 100000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in California counties') +
    facet_wrap(~ county) +
    theme_minimal()

0.9 Louisiana

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="Louisiana")
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 10000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in Louisiana counties') +
    facet_wrap(~ county) +
    theme_minimal()

0.10 Tennessee

No protests against lockdown in Tennessee but I am curious how it looks. I removed Bledsoe county because it seems to have a data error (100 million new cases on one day).

plotData <- covidByCounty %>%
  dplyr::filter(us_state=="Tennessee") %>% filter(! (county %in% c("Bledsoe", "Trousdale")))
ggplot(plotData, aes(x=cases, y=smoothed, group = state)) +
    geom_line(data = plotData %>% rename(group = county),
              aes(x = cases, y = smoothed, group = group), color = "grey") +
    geom_line(aes(y = smoothed), color = "black") +
    scale_x_log10(label = comma, breaks = c(100, 1000, 10000)) + 
    scale_y_log10(label = comma) +
    coord_equal() +
    labs(x = 'Total confirmed cases',
         y = 'New confirmed cases per day',
         title = 'Trajectory of COVID-19 cases in Tennessee counties') +
    facet_wrap(~ county) +
    theme_minimal()